A search engine is a computer program used to index electronically stored information (referred to as a corpus) and search the indexed electronic information to return electronically stored information responsive to a search. Items of electronic information that form the corpus may be referred to interchangeably as (electronic) documents, files, objects, items, content, etc. and may include objects such as files of almost any type including documents for various editing applications, emails, workflows, etc. In a conventional search engine, a user submits a query and the search engine selects a set of results from the corpus based on the terms of the search query. The terms of search queries usually specify words, terms, phrases, logical relationships, metadata fields to be searched, synonyms, stemming variations, etc.
Generally, there are two basic methods for selecting a set of results from a corpus based on a search query. In the first method, an item that meets the explicit search terms of the search query will be selected. Only items of the corpus that meet the explicit requirements of the search terms are selected and presented. In the second method, for some types of applications, the set of results selected is constrained (or further constrained) by a relevance measure. In particular, results selected by evaluating a search query as an explicit query are further scored and ordered by some criteria, and only the highest results are selected. Relevance scoring may incorporate variables such as the frequency of terms, weights on results with certain values or in specified metadata fields, distance from a value or a date, similarity to other results or objects, etc.
These types of searches may be employed in various different contexts and for various different purposes; however, in certain contexts one or the other type of search may prove more or less useful or apropos for a certain task. Certain areas have, however, proved difficult to the application of searches of either type. Examples of such searches involve searches of certain fields (or regions) where the fields may, or may not, exist for particular documents within the corpus.
When employing search in association with such systems that may maintain regions, determining the meaningful regions to search and which to search may be difficult as these fields may or may not exist or be populated with respect to different documents in the corpus. Accordingly, it may be desired to search objects based on the values within these regions, accounting for the presence (or lack of) a value in these regions, or a priority of these regions.
Traditional search systems do not support the ability to conduct these types of searches. Thus, to implement a search of this type a user must construct a search query that explicitly enumerates each of the possible alternatives. This enumeration process is complex and not easily understood or accomplished by most users. Moreover, these searches (even when optimized) tend to be inefficient. Accordingly, the implementation of a search according to such search queries by typical search engines may consume large quantities of time, memory or other computer resources. In some cases, for certain queries, the resources required for a particular query may exceed the computing resources available or may require that certain computing resources be taken off-line and dedicated to the search in order to complete such a search.
What is needed, therefore, are systems and methods that allow simple specification of searches of multiple of regions where those regions may be prioritized, and that efficiently implement such searches.